package dao

import (
	"time"
)

// 这是 GcttUser 的全局公开dao对象，被service层调用!
var GcttUserDao = gcttUserDao{}

// Go语言中文网翻译组用户表
// 这是 gctt_user表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type GcttUser struct {
	Id        int32     `json:"id" form:"id" db:"id" v:"id"`
	Username  string    `json:"username" form:"username" db:"username" v:"username"`     // Github 用户名
	Avatar    string    `json:"avatar" form:"avatar" db:"avatar" v:"avatar"`             // github 头像
	Uid       int32     `json:"uid" form:"uid" db:"uid" v:"uid"`                         // 本站uid
	JoinedAt  int32     `json:"joined_at" form:"joined_at" db:"joined_at" v:"joined_at"` // 加入GCTT时间，第一个 pr 时间
	LastAt    int32     `json:"last_at" form:"last_at" db:"last_at" v:"last_at"`         // 最后一个 pr 时间
	Num       int32     `json:"num" form:"num" db:"num" v:"num"`                         // 翻译的文章数
	Word      int32     `json:"word" form:"word" db:"word" v:"word"`                     // 翻译的字数
	AvgTime   int32     `json:"avg_time" form:"avg_time" db:"avg_time" v:"avg_time"`     // 平均每篇用时(秒)
	Role      int8      `json:"role" form:"role" db:"role" v:"role"`                     // 角色，如 组长、选题、校对等。0-译者；1-组长；2-选题；3-校对；4-核心成员
	CreatedAt time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`
}

// 注意:这是 GcttUser 的私有dao对象，只能在dao层内使用!
type gcttUserDao struct {
	InsertTemplate func(arg GcttUser) (int64, error)          //插入一条记录
	UpdateTemplate func(arg GcttUser) (int64, error)          //更新一条记录
	DeleteTemplate func(id int64) (int64, error)              `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (GcttUser, error)           `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg GcttUserList) ([]GcttUser, error) //模糊分页查询
}

/*
// 这是 gctt_user 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type GcttUserPostman struct {
id
username
avatar
uid
joined_at
last_at
num
word
avg_time
role
created_at

}*/

// 这是 gctt_user 表的批量请求参数
type GcttUserReq struct {
	List []GcttUser `json:"list" form:"list"`
}

// 这是 gcttUserDao.List()方法的请求参数
type GcttUserList struct {
	Page
}
